#include "stm32f10x.h"
#include "FtpServer.h"

#include "StringFun.h"
#include "sys.h"
#include "Serial.h"
#include "AtCmd.h"

// FTP server state and command state
FTP_Server_State ftp_server_state = FTP_IDLE;
FTP_Command_State ftp_command_state = CMD_SEND;

// FTP server configuration
FTP_Server_Config ftp_server_config;// FTP服务器配置信息
uint8_t ftp_server_config_flag = 0; // 配置信息是否已更新
uint8_t ftp_server_start_flag = 0;  // 开始服务标志

// FTP配置信息字符串
char FtpConfigStr[64] = {0};

void Ftp_Server_Init(void)
{
   static uint32_t time_stamp = 0;  // 时间戳
   uint8_t Ftp_Serveer_Init_Flag = 1; // FTP服务初始化标志
    // 重置AT模块并确保FTP服务关闭
    // 测试命令
    enum {
        FTP_INIT_TEST,                    // 测试命令
        FTP_INIT_SERVER_LOGOUT,          // 登出FTP服务器
        FTP_INIT_SERVER_STOP,            // 关闭FTP服务
        FTP_INIT_END                      // 结束
    } ftp_server_init = FTP_INIT_TEST;

    time_stamp = GetSystemTick(); // 获取当前时间戳
    for(;Ftp_Serveer_Init_Flag;) 
    {
        switch (ftp_server_init)
        {
        case FTP_INIT_TEST:
            // 测试命令
            if(GetSystemTick() - time_stamp > 1000) {
                // 发送AT命令
                // At_Command_Init();
                // At_Command_Applictaion("AT", "", "OK", 1000, 1000);
                Serial_SendString("AT\r\n");
                time_stamp = GetSystemTick(); // 获取当前时间戳
                ftp_server_init = FTP_INIT_SERVER_LOGOUT; // 切换到下一步
            }
            break;
        case FTP_INIT_SERVER_LOGOUT:
            // 登出FTP服务器
            if(GetSystemTick() - time_stamp > 1000)
            {
                // 发送AT命令
                Serial_SendString("AT+CFTPSLOGOUT\r\n");
                // At_Command_Init();
                // At_Command_Applictaion("AT+LOGOUT", "", "OK", 1000, 1000);
                time_stamp = GetSystemTick(); // 获取当前时间戳
                ftp_server_init = FTP_INIT_SERVER_STOP; // 切换到下一步
            }
            break;
        case FTP_INIT_SERVER_STOP:
            // 关闭FTP服务
            // 发送AT命令
            if(GetSystemTick() - time_stamp > 1000)
            {
                // 发送AT命令
                Serial_SendString("AT+CFTPSSTOP\r\n");
                // At_Command_Init();
                // At_Command_Applictaion("AT+QSTOP", "", "OK", 1000, 1000);
                time_stamp = GetSystemTick(); // 获取当前时间戳
                ftp_server_init = FTP_INIT_END; // 切换到结束状态
            }
            break;
        case FTP_INIT_END:
            // 结束
            Ftp_Serveer_Init_Flag = 0; // 退出初始化状态
            break;
        default:
            // 未知状态
            ftp_server_init = FTP_INIT_TEST; // 切换到测试状态
            break;
        }

    }
    
	
    // 初始化FTP服务器状态和命令状态
    ftp_server_state = FTP_IDLE;
    ftp_command_state = CMD_SEND;
}


// 构建FTP配置信息
static void Build_Ftp_Config(FTP_Server_Config *config)
{
    // 构建配置信息字符串
    memset(FtpConfigStr, 0, sizeof(FtpConfigStr));
    AddStringToArray(config->ip, FtpConfigStr);
    strcat(FtpConfigStr, ",");
    strcat(FtpConfigStr, config->port);
    strcat(FtpConfigStr, ",");
    AddStringToArray(config->username, FtpConfigStr);
    strcat(FtpConfigStr, ",");
    AddStringToArray(config->password, FtpConfigStr);
    strcat(FtpConfigStr, ",0");
}

// FTP server application
void Ftp_Server_Applictaion(const char *ip, const char *port, const char *username, const char *password, const char *file_name)
{
    // 构建FTP配置信息
    strcpy(ftp_server_config.ip, ip);// IP地址
    strcpy(ftp_server_config.port, port);// 端口号
    strcpy(ftp_server_config.username, username);// 用户名
    strcpy(ftp_server_config.password, password);// 密码
    memset(ftp_server_config.file_name, 0, sizeof(ftp_server_config.file_name)); // 格式化指令缓冲区
    AddStringToArray(file_name, ftp_server_config.file_name);// 文件名

    // 构建配置信息字符串
    Build_Ftp_Config(&ftp_server_config);

    // 更新配置信息
    ftp_server_config_flag = 1; // 配置信息已更新
    ftp_server_start_flag = 1;  // 开始服务标志
}

void Ftp_Server_Process(void)
{
    // TODO: process FTP server
    switch (ftp_server_state)
    {
    case FTP_IDLE:
        /* 空闲状态 */
        
        break;
     case FTP_START:
        /* 开启服务状态 */
        
        break;
    case FTP_LOGIN:
        /* 登录状态 */
        
        break;
    case FTP_RUNNING:
        /* 运行状态 */
        
        break;
    case FTP_LOGOUT:
        /* 登出状态 */
        
        break;
    case FTP_STOP:
        /* 停止服务状态 */
        
        break;
    default:
        break;
    }
}
